import java.util.*;

/**
 * @author LKQ
 * @date 2022/4/1 9:06
 * @description 思路：用Map统计每个值的个数，并将其绝对值从小到大排序，其中0只能有偶数个，
 */
public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] arr = {4, 2, -2, -4};
        solution.canReorderDoubled(arr);
    }

    public boolean canReorderDoubled(int[] arr) {
        Map<Integer, Integer> cnt = new HashMap<>();
        for (int x : arr) {
            cnt.put(x, cnt.getOrDefault(x, 0) + 1);
        }
        if (cnt.getOrDefault(0, 0) % 2 == 1) {
            // 0有奇数个
            return false;
        }
        List<Integer> val = new ArrayList<>();
        for (int x : cnt.keySet()) {
            val.add(x);
        }
        // 键按绝对值大小排序
        val.sort((a, b) -> Math.abs(a) - Math.abs(b));
        for (int x : val) {
            if (cnt.getOrDefault(2 * x, 0) < cnt.get(x)) {
                return false;
            }
            cnt.put(2 * x, cnt.getOrDefault(2 * x, 0) - cnt.get(x));
        }
        return true;
    }
}
